Don't crash if menu or toolbar positions can't be found. (#396161, Hans
authorMatthias Clasen <mclasen@redhat.com>
Sun, 14 Jan 2007 05:31:46 +0000 (05:31 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sun, 14 Jan 2007 05:31:46 +0000 (05:31 +0000)
2007-01-13  Matthias Clasen  <mclasen@redhat.com>

        * gtk/gtkuimanager.c: Don't crash if menu or toolbar
        positions can't be found.  (#396161, Hans Breuer)

svn path=/trunk/; revision=17147

ChangeLog
gtk/gtkuimanager.c

index 0fd38f82fb7c4e8c3873d720f35378225bf90018..c7b6f1c9aabc4a50810de19e820bbac4fe7c2881 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-01-13  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkuimanager.c: Don't crash if menu or toolbar
+       positions can't be found.  (#396161, Hans Breuer)
+
 2007-01-13  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkselection.c (_gtk_selection_request): Plug 
index 032344a0b39ef8e3396100994f91d3983054f13e..bcf06b1c63c199f341e37919dd679a9c1d6ea181 100644 (file)
@@ -1850,9 +1850,12 @@ find_menu_position (GNode      *node,
       else
        prev_child = NODE_INFO (sibling)->proxy;
 
-      g_return_val_if_fail (GTK_IS_WIDGET (prev_child), FALSE);
+      if (!GTK_IS_WIDGET (prev_child))
+        return FALSE;
+
       menushell = gtk_widget_get_parent (prev_child);
-      g_return_val_if_fail (GTK_IS_MENU_SHELL (menushell), FALSE);
+      if (!GTK_IS_MENU_SHELL (menushell))
+        return FALSE;
 
       pos = g_list_index (GTK_MENU_SHELL (menushell)->children, prev_child) + 1;
     }
@@ -1915,9 +1918,12 @@ find_toolbar_position (GNode      *node,
       else
        prev_child = NODE_INFO (sibling)->proxy;
 
-      g_return_val_if_fail (GTK_IS_WIDGET (prev_child), FALSE);
+      if (!GTK_IS_WIDGET (prev_child))
+        return FALSE;
+
       toolbar = gtk_widget_get_parent (prev_child);
-      g_return_val_if_fail (GTK_IS_TOOLBAR (toolbar), FALSE);
+      if (!GTK_IS_TOOLBAR (toolbar))
+        return FALSE;
 
       pos = gtk_toolbar_get_item_index (GTK_TOOLBAR (toolbar),
                                        GTK_TOOL_ITEM (prev_child)) + 1;
@@ -2437,16 +2443,18 @@ update_node (GtkUIManager *self,
          gtk_menu_item_set_submenu (GTK_MENU_ITEM (info->proxy), NULL);
          gtk_action_connect_proxy (action, info->proxy);
        }
-      g_signal_connect (info->proxy, "notify::visible",
-                       G_CALLBACK (update_smart_separators), NULL);
-      if (in_popup) 
-       {
-         /* don't show accels in popups */
-         GtkWidget *label = GTK_BIN (info->proxy)->child;
-         g_object_set (label,
-                       "accel-closure", NULL,
-                       NULL);
-       }
+
+      if (info->proxy)
+        {
+          g_signal_connect (info->proxy, "notify::visible",
+                           G_CALLBACK (update_smart_separators), NULL);
+          if (in_popup) 
+           {
+             /* don't show accels in popups */
+             GtkWidget *label = GTK_BIN (info->proxy)->child;
+             g_object_set (label, "accel-closure", NULL, NULL);
+           }
+        }
       
       break;
     case NODE_TYPE_TOOLITEM:
@@ -2487,19 +2495,21 @@ update_node (GtkUIManager *self,
          gtk_action_connect_proxy (action, info->proxy);
        }
 
-      /* FIXME: we must re-set the tooltip, since tooltips on toolitems can't be 
-       * set before the toolitem is added to the toolbar.
-       */
-      {
-       gchar *tooltip;
-
-       g_object_get (G_OBJECT (action), "tooltip", &tooltip, NULL);
-       g_object_set (G_OBJECT (action), "tooltip", tooltip, NULL);
-       g_free (tooltip);
-      }
-
-      g_signal_connect (info->proxy, "notify::visible",
-                       G_CALLBACK (update_smart_separators), NULL);
+      if (info->proxy)
+        {
+          /* FIXME: we must re-set the tooltip, since tooltips on 
+           * toolitems can't be set before the toolitem is added 
+           * to the toolbar.
+           */
+         gchar *tooltip;
+
+         g_object_get (G_OBJECT (action), "tooltip", &tooltip, NULL);
+         g_object_set (G_OBJECT (action), "tooltip", tooltip, NULL);
+         g_free (tooltip);
+     
+          g_signal_connect (info->proxy, "notify::visible",
+                           G_CALLBACK (update_smart_separators), NULL);
+        }
       break;
     case NODE_TYPE_SEPARATOR:
       if (NODE_INFO (node->parent)->type == NODE_TYPE_TOOLBAR ||